# Cross-Validation Data Split Implementation (medium)
import numpy as np


# 编写一个 Python 函数，从头开始执行 k 折交叉验证数据拆分。
# 该函数应接受一个数据集
#   （作为一个二维 NumPy 数组，其中每行代表一个数据样本，
#   每列代表一个特征）
# 和一个表示折数的整数 k。
# 该函数应将数据集拆分为 k 部分，
# 系统地使用其中一部分作为测试集，其余部分作为训练集，
# 并返回一个列表，其中每个元素是一个包含训练集和测试集的元组。


def cross_validation_split(data: np.ndarray, k: int, seed=42) -> list:
    np.random.seed(seed)
    fold_size = data.shape[0] // k
    np.random.shuffle(data)  # This line can be removed if shuffling is not desired in examples
    folds = []
    for i in range(k):
        start, end = i * fold_size, (i + 1) * fold_size if i != k-1 else len(data)
        test = data[start:end]
        train = np.concatenate([data[:start], data[end:]])
        folds.append([train.tolist(), test.tolist()])
    return folds
